// use super::ordered_i32::IOrdered32;




// pub fn index_of<V>(items: &Vec<V>, key2find: i32) -> Option<usize>
//     where V: IOrdered32 {
//     match items.binary_search_by(|x| x.key().cmp(&key2find)) {
//         Ok(index) => Some(index),
//         Err(_) => None,
//     }
// }


// #[cfg(test)]
// mod tests {
//     use fasttime::b2_time::TimeFT;

//     use crate::list::ordered_i32::IOrdered32;

//     // impl IOrdered32 for i32 {
//     //     fn key(&self) -> i32 {
//     //         *self
//     //     }
//     // }

    
//     #[test]
//     fn test_binary_search_1() {
//         let name = "test_binary_search_1 普通单元测试";
//         let cpu = "Intel(R) Xeon(R) CPU E5 2680 v3 @ 2.50GHz 2.50GHz";
//         println!("{name}: {cpu}");
//         for count in [10_0000, 100_0000, 1000_0000, 1_0000_0000, 10_0000_0000] {
//             let time_开始 = TimeFT::now();
//             let mut items = Vec::with_capacity(count as usize);
//             for v in 0..count {
//                 items.push(v);
//             }
//             let time_初始化 = TimeFT::now();
//             for key2find in 0..count {
//                 match super::index_of(&items, key2find) {
//                     Some(index) => assert_eq!(index as i32, key2find),
//                     None => panic!("{name} 必须找到: {key2find} [0, {count})"),
//                 }
//             }
//             let time_查找 = TimeFT::now();
//             let secs_初始化 = time_初始化.seconds_from(&time_开始);
//             let secs_查找 = time_查找.seconds_from(&time_初始化);
//             let micros_每一次查找 = time_查找.micros_from(&time_初始化) as f64 / count as f64;
//             println!("\t[0, {count}): {time_开始}, {secs_初始化:.3} 秒(初始化), {secs_查找:.3} 秒(查找), 平均 {micros_每一次查找:.2} 微秒 / 每一次查找.");
//         }
//         /*
//         cargo test test_binary_search_1 -- --nocapture
//         test_binary_search_1 普通单元测试: Intel(R) Xeon(R) CPU E5 2680 v3 @ 2.50GHz 2.50GHz
//         [0, 100000): 21:47:54(506)090, 0.005 秒(初始化), 0.035 秒(查找), 平均 0.35 微秒 / 每一次查找.
//         [0, 1000000): 21:47:54(546)126, 0.025 秒(初始化), 0.326 秒(查找), 平均 0.33 微秒 / 每一次查找.
//         [0, 10000000): 21:47:54(897)325, 0.183 秒(初始化), 3.857 秒(查找), 平均 0.39 微秒 / 每一次查找.
//         [0, 100000000): 21:47:58(941)093, 1.661 秒(初始化), 40.848 秒(查找), 平均 0.41 微秒 / 每一次查找.
//         [0, 1000000000): 21:48:41(493)663, 16.706 秒(初始化), 456.158 秒(查找), 平均 0.46 微秒 / 每一次查找.
//          */
//     }

//     #[test]
//     fn test_binary_search_2_最普通() {
//         let name = "test_binary_search_2_最普通 普通单元测试";
//         let cpu = "Intel(R) Xeon(R) CPU E5 2680 v3 @ 2.50GHz 2.50GHz";
//         println!("{name}: {cpu}");
//         for count in [10_0000, 100_0000, 1000_0000, 1_0000_0000, 10_0000_0000] {
//             let time_开始 = TimeFT::now();
//             let mut items = Vec::with_capacity(count as usize);
//             for v in 0..count {
//                 items.push(v);
//             }
//             let time_初始化 = TimeFT::now();
//             for key2find in 0..count {
//                 match items.binary_search(&key2find) {
//                     Ok(index) => assert_eq!(index as i32, key2find),
//                     Err(_) => panic!("{name} 必须找到: {key2find} [0, {count})"),
//                 }

//             }
//             let time_查找 = TimeFT::now();
//             let secs_初始化 = time_初始化.seconds_from(&time_开始);
//             let secs_查找 = time_查找.seconds_from(&time_初始化);
//             let micros_每一次查找 = time_查找.micros_from(&time_初始化) as f64 / count as f64;
//             println!("\t[0, {count}): {time_开始}, {secs_初始化:.3} 秒(初始化), {secs_查找:.3} 秒(查找), 平均 {micros_每一次查找:.2} 微秒 / 每一次查找.");
//         }
//         /*
//         cargo test test_binary_search_2_最普通 -- --nocapture
//         test_binary_search_2_最普通 普通单元测试: Intel(R) Xeon(R) CPU E5 2680 v3 @ 2.50GHz 2.50GHz
//         [0, 100000): 21:32:47(817)358, 0.004 秒(初始化), 0.023 秒(查找), 平均 0.23 微秒 / 每一次查找.
//         [0, 1000000): 21:32:47(844)710, 0.016 秒(初始化), 0.289 秒(查找), 平均 0.29 微秒 / 每一次查找.
//         [0, 10000000): 21:32:48(149)775, 0.157 秒(初始化), 3.460 秒(查找), 平均 0.35 微秒 / 每一次查找.
//         [0, 100000000): 21:32:51(770)811, 1.724 秒(初始化), 36.398 秒(查找), 平均 0.36 微秒 / 每一次查找.
//         [0, 1000000000): 21:33:29(928)741, 16.607 秒(初始化), 395.831 秒(查找), 平均 0.40 微秒 / 每一次查找.
//          */
//     }
    
// }
